]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
appMenu: Clean up on destroy
authorFlorian Müllner <fmuellner@gnome.org>
Wed, 11 Aug 2021 22:24:02 +0000 (00:24 +0200)
committerMarge Bot <marge-bot@gnome.org>
Mon, 16 Aug 2021 21:28:22 +0000 (21:28 +0000)
For now the menu is only used in the top bar, where we can assume
that it exists "forever". This won't be the case when we start
reusing it elsewhere, so make sure we clean up after ourselves.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1948>

js/ui/appMenu.js

index ae6aa16a0f1937f84843d29c40c30e3ae20ddf1e..42c92a42226239c550f1910c29b8c4c07e235455 100644 (file)
@@ -55,8 +55,12 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu {
 
         this.addAction(_('Quit'), () => this._app.request_quit());
 
-        this._appSystem.connect('installed-changed',
-            () => this._updateDetailsVisibility());
+        this._signals = [];
+        this._signals.push([
+            this._appSystem,
+            this._appSystem.connect('installed-changed',
+                () => this._updateDetailsVisibility()),
+        ]);
         this._updateDetailsVisibility();
     }
 
@@ -65,6 +69,17 @@ var AppMenu = class AppMenu extends PopupMenu.PopupMenu {
         this._detailsItem.visible = sw !== null;
     }
 
+    /** */
+    destroy() {
+        super.destroy();
+
+        for (const [obj, id] of this._signals)
+            obj.disconnect(id);
+        this._signals = [];
+
+        this.setApp(null);
+    }
+
     /**
      * @returns {bool} - true if the menu is empty
      */